
#include "ps2_client.h"
#include <Arduino.h>

#ifndef __ps2_client_ms_H__
#define __ps2_client_ms_H__

typedef struct PS2_MS_INFO {
    uint8_t STATUS;          // 0x0: 未初始化； 0x01: 可用
    uint8_t Enable;          // 0: 停止扫描  1: 使能
    uint8_t devID;           // 0x00: 标准PS/2(3键，无滚轮)  0x03:Intellimouse（3键，有滚轮） 0x04：Intellimouse扩展（5键，有滚轮）
    uint8_t mode;            // 模式：00:初始化  01：stream（有变化就发送） 02：remote（查询才发送） 03：wrap（会送字节）
    uint8_t last_mode;       // 模式： 前一模式状态
    uint8_t SamplingRate[3]; // 采样率   当前采样率，前次采样率，前前次采样率 —— 主机会通过连续设置采样率来确定设备的按键数
    u_long SamplingRateMs;   // 采样率 —— 换算成ms计数
    u_long SamplingRateTime; // 采样率计时
    uint8_t Resolution;      // 分辨率  （0： 1点/mm  1： 2点/mm  2： 4点/mm  3： 8点/mm）
    uint8_t Scaling;         // 缩放比例
    uint8_t KeyStatus[5];    // 记录每个按键当前状态 0：释放， 1按下(左、中、右，键4，键5)
    uint8_t KeyStatusTmp[5]; // 所有每个按键的新状态 0：释放， 1按下(左、中、右，键4，键5)
    int16_t Position[3];     // 记录X,Y,滚轮当前值
    uint8_t data[4];         // 准备发送的按键和位移数据
} _PS2_MS_INFO;

class PS2_Client_MS : public PS2_Client {
private:
    PS2_MS_INFO _PS2_MS_INFO;

public:
    void makeData();
    void readAndExec();
    void resetDevice();

    void setKey(int key, int status);
    void nodifyPosition(int pos, int16_t value);
};

#endif